/* Copyright (c) 2011 Alexandre Défossez
 * This file is part of HINAPT.
 *
 * HINAPT is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * HINAPT is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with HINAPT.  If not, see <http://www.gnu.org/licenses/>.
 */

  /*!
  \file EyeDetector.hpp
  Permet de détecter les yeux sur une image grâce à Viola-Jones. Pour le moment
  c'est l'implémentation d'OpenCV qui est utilisée.
 */

#ifndef EYEDETECTOR_HPP
#define EYEDETECTOR_HPP

#include "_tracker.hpp"

/*!
  Permet de détecter les yeux sur une image
*/
class EyeDetector
{
  public:
    /*!
      \param leftEyeCascadeFile classifieur pour l'oeil gauche
      \param rightEyeCascadeFile classifieur pour l'oeil droit
      \param faceCascadeFile classifieur pour la tête
    */
    EyeDetector(string leftEyeCascadeFile="hc_eyes.xml",
                string rightEyeCascadeFile="hc_eyes.xml",
               string faceCascadeFile="hc_face.xml");

    /*!
      Trouve les deux yeux sur l'image
      \param[in] img l'image à scanner
      \param[out] leftEye le rectangle contenant l'oeil gauche
      \param[out] rightEye le rectangle contenant l'oeil droit
      \return true si les yeux ont été trouvé
    */
    bool find(Mat&img, Rect &leftEye, Rect &rightEye);
    /*!
      \see find(Mat&img, Rect &leftEye, Rect &rightEye)
      \param[in] img l'image à scanner
      \param[out] leftEye le centre de l'oeil gauche
      \param[out] rightEye le centre de l'oeil droit
      \return true si les yeux ont été trouvé
    */
    bool find(Mat&img, Point2f &leftEye, Point2f &rightEye);

    /*!
      Classifieurs de l'oeil gauche et droit
    */
    CascadeClassifier eyeClassifier[2];
    /*!
      Classifieur de la tête
    */
    CascadeClassifier faceClassifier;

};


#endif // EYEDETECTOR_HPP
